From: Matthias Clasen Date: Sun, 19 Nov 2017 23:03:07 +0000 (-0500) Subject: emoji chooser: Make menu key work as expected X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~38^2~177 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=6b126a70e2d0fb1d0c30d8d49c2e56861d4aeb01;p=gtk%2B3.0.git emoji chooser: Make menu key work as expected Whenever we have a right-click action, we should make the menu key work as a keyboard-accessible alternative. --- diff --git a/gtk/gtkemojichooser.c b/gtk/gtkemojichooser.c index 65d2ef15a4..e06ecb8591 100644 --- a/gtk/gtkemojichooser.c +++ b/gtk/gtkemojichooser.c @@ -129,7 +129,8 @@ static void add_emoji (GtkWidget *box, gboolean prepend, GVariant *item, - gunichar modifier); + gunichar modifier, + GtkEmojiChooser *chooser); #define MAX_RECENT (7*3) @@ -149,7 +150,7 @@ populate_recent_section (GtkEmojiChooser *chooser) emoji_data = g_variant_get_child_value (item, 0); g_variant_get_child (item, 1, "u", &modifier); - add_emoji (chooser->recent.box, FALSE, emoji_data, modifier); + add_emoji (chooser->recent.box, FALSE, emoji_data, modifier, chooser); g_variant_unref (emoji_data); g_variant_unref (item); } @@ -192,7 +193,7 @@ add_recent_item (GtkEmojiChooser *chooser, } g_list_free (children); - add_emoji (chooser->recent.box, TRUE, item, modifier); + add_emoji (chooser->recent.box, TRUE, item, modifier, chooser); g_settings_set_value (chooser->settings, "recent-emoji", g_variant_builder_end (&builder)); @@ -277,9 +278,9 @@ show_variations (GtkEmojiChooser *chooser, g_signal_connect (box, "child-activated", G_CALLBACK (emoji_activated), parent_popover); - add_emoji (box, FALSE, emoji_data, 0); + add_emoji (box, FALSE, emoji_data, 0, NULL); for (modifier = 0x1f3fb; modifier <= 0x1f3ff; modifier++) - add_emoji (box, FALSE, emoji_data, modifier); + add_emoji (box, FALSE, emoji_data, modifier, NULL); gtk_widget_show_all (view); gtk_popover_popup (GTK_POPOVER (popover)); @@ -327,11 +328,22 @@ pressed_cb (GtkGesture *gesture, show_variations (chooser, child); } +static gboolean +popup_menu (GtkWidget *widget, + gpointer data) +{ + GtkEmojiChooser *chooser = data; + + show_variations (chooser, widget); + return TRUE; +} + static void add_emoji (GtkWidget *box, gboolean prepend, GVariant *item, - gunichar modifier) + gunichar modifier, + GtkEmojiChooser *chooser) { GtkWidget *child; GtkWidget *ebox; @@ -377,6 +389,10 @@ add_emoji (GtkWidget *box, gtk_container_add (GTK_CONTAINER (child), ebox); gtk_container_add (GTK_CONTAINER (ebox), label); gtk_widget_show_all (child); + + if (chooser) + g_signal_connect (child, "popup-menu", G_CALLBACK (popup_menu), chooser); + gtk_flow_box_insert (GTK_FLOW_BOX (box), child, prepend ? 0 : -1); } @@ -416,7 +432,7 @@ populate_emoji_chooser (GtkEmojiChooser *chooser) else if (strcmp (name, chooser->flags.first) == 0) box = chooser->flags.box; - add_emoji (box, FALSE, item, 0); + add_emoji (box, FALSE, item, 0, chooser); g_variant_unref (item); }